package main

import (
	"fmt"
	"reflect"
)

// 可以用“*”声明一个指针类型的【指针类型只能是变量】
// 可以使用&操作符获取某个变量或常量的内存地址，从而产生一个指针
func main() {
	var a = 65536
	//每个变量有自己的内存地址，所以a与b不同
	fmt.Println(a, &a)

	var b = 65536
	//去变量b的地址赋予指针类型p
	var p = &b
	//0xc00000a120 *int 65536
	fmt.Println(p, reflect.TypeOf(p), *p)

	arr := [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr)
	tryChange(&arr)
	fmt.Println(arr)
}

// 传入指针类型的数据，实际传递的是内存地址，参数接收到内存地址后，实际操作的还是原来的数据。
// 所以函数内的操作会返回空调用方中
func tryChange(a *[5]int) {
	a[2] = 1
}
